import dayjs from 'dayjs';

export interface Progress {
  id: number | null; // 主键
  createBy: any;
  createTime: any;
  updateBy: any;
  updateTime: any;
  remark: string | null;
  xmlId: string | null; // xml主键
  uid: number; // 任务的唯一标识符
  taskId: string | null; // 进度计划编号
  taskName: string; // 任务名称
  preTask: string | null; // 前置任务，指向uid
  preTaskType: string | null; // 前置任务类型，S for 开始，F for 结束
  taskStarttime: string | null; // 任务开始时间
  taskEndtime: string | null; // 任务结束时间
  parentTask: string | null; // 指向uid
  engineeringAmount: any;
  unit: any;
  actualProgress: any;
  realStarttime: any;
  realEndtime: any;
  status: string | null; // 完成状态
  projectId: string | null; // 所属任务id
  compentsIds: string | null; // 构件id列表
  completionAmount: any; // 实际完成量
  deviationAnalyse: string | null; // 偏差分析
  planFinishRate: any; // 计划完成比率
  realFinishRate: any; // 实际完成比率
  isSelect: any;
  isSelectProgressAnalysis: any;
  planName: any;
  wbs: any;
  weight: any;
  fillInfoDate: string | null;
}

export interface FieldNames {
  id: number | null; // 主键
  createBy: any;
  createTime: any;
  updateBy: any;
  updateTime: any;
  remark: string | null;
  xmlId: string | null; // xml主键
  uid: number; // 任务的唯一标识符
  taskId: string | null; // 进度计划编号
  taskName: string; // 任务名称
  preTask: string | null; // 前置任务，指向uid
  preTaskType: string | null; // 前置任务类型，S for 开始，F for 结束
  taskStarttime: string | null; // 任务开始时间
  taskEndtime: string | null; // 任务结束时间
  parentTask: string | null; // 指向uid
  engineeringAmount: any;
  unit: any;
  actualProgress: any;
  realStarttime: any;
  realEndtime: any;
  status: string | null; // 完成状态
  projectId: string | null; // 所属任务id
  compentsIds: string | null; // 构件id列表
  completionAmount: any; // 实际完成量
  deviationAnalyse: string | null; // 偏差分析
  planFinishRate: any; // 计划完成比率
  realFinishRate: any; // 实际完成比率
  isSelect: any;
  isSelectProgressAnalysis: any;
  planName: any;
  wbs: any;
  weight: any;
  fillInfoDate: string | null;
}

export enum ControllerStatus {
  Init = 'init',
  Playing = 'playing',
  Stopping = 'stopping',
  End = 'end',
}

export interface Task {
  name: string; // 任务名称
  parentTask: string | null; // 父任务
  weight: number | null; // 任务权重
  startDate: dayjs.Dayjs ; // 计划开始日期
  endDate: dayjs.Dayjs; // 计划结束日期
  duration: number; // 计划持续天数
  realStartDate: dayjs.Dayjs | null; // 实际开始日期
  realEndDate: dayjs.Dayjs | null; // 实际结束日期
  planCode: string | null; // 进度计划编号，用于在BImface查构件id列表
  componentIds: string[]; // 构件id列表
  engineeringAmount: number | null; // 总工程量
  completionAmount: number | null; // 实际完成量
  unit: string; // 工程量单位
  planFinishRate: number; // 计划完成比率
  realFinishRate: number; // 实际完成比率
  deviationAnalyse: string | null; // 偏差分析
  fillInfoDate: dayjs.Dayjs | null; // 数据填报日期
}

export type TaskRecord = Record<string, Task>;

export interface Scale {
  date: dayjs.Dayjs;
  week: string;
  planTaksIds: {
    todo: string[];
    doing: string[];
    done: string[];
  };
  realTaskIds: {
    startOnTime: string[];
    startLag: string[];
    doingAhead: string[];
    doingLag: string[];
    doingNotStart: string[];
    done: string[];
    doneLag: string[];
    null: string[];
  }
}

export enum TASK_STATUS {
  START_ON_TIME,
  START_LAG,
  DOING_AHEAD,
  DOING_LAG,
  DOING_NOT_START,
  DONE,
  DONE_LAG,
  NULL,
}

export const STATUS_COLOR = {
  START_ON_TIME: '#00ced1',
  START_LAG: '#db2777',
  DOING_AHEAD: '#008000',
  DOING_LAG: '#daa520',
  DOING_NOT_START: '#db2777',
  DONE: '#0000ff',
  DONE_LAG: '#ffa500',
}

export type PLAY_STATUS = 'init' | 'playing' | 'stopping';